一默

April 18, 2010

说说GoF模式中的行为模式6

Filed under: Tech — admin @ 12:34 pm

6.
CoR模式:
这个好理解,A,B,C,D都实现处理该请求的接口,来了请求后A先看自己能不能处理
,不能就
丢给下一个,下一个不能处理继续丢给下一个……

interface Request {
public void action();
}
class ACanHandleRequest {
public void action() {
}
}
interface Hanlder {
public void handle(Request request);
}
class A implement Handler {
private Handler nextHandler;
public void A(Handler next) {
this.nextHandler = next;
}
public void handle(Request req) {
if (req instanceof ACanHanleReqeust)
req.action();
else
next.handle(req);
}
}

责任链上的下一个Handler可以通过当前Handler的构造指定或是提供一个set方法指

Mediator模式:
中介,这个很形象,抽象一个中介者出来,负责所有相关对象的交互,比如A想要向
B借钱,A先向中介说我要向B借钱,中介找B借钱,然后把钱返回给A,B向A借钱一样

interface Mediator {
A向B借钱();
B向A借钱();
}
class A {
Mediator m;
向B借钱(Mediator m) {
m.A向B借钱();
}
}
class B {
Mediator m;
向A借钱(Mediator m) {
m.B向A借钱();
}
}

然后一个具体类实现Mediator接口实现两个借钱方法,这有点像数据库里面的多对多
关系要抽象出三个表来,变成两个一对多,消除冗余
Interpreter:
这个没看,平时也不用,主要用来对语言的分析,看着就头大……
State:
主要用于状态转换比较复杂的地方,比如现在如果是a->b->c->d四个状态的转换,
平时都是if状态是a,状态转成b,if状态是b,状态转成c,if状态是c,状态转成d,而State模式把这几个State封装成类,然后由统一的转换管理器管理:

interface State {
public void next(Manager m);
public void previouse(Manager m);
}
class AState implements State {
public void next(Manager m) {
m.setState(new XState());
}
public void previouse(Manager m) {
m.setState(new XState());
}

BState,CState,DState……一样

class Manager {
private State state;
public void setState(State state) {
this.state = state;
}
public void next() {
state.next();
}
public void previouse() {
state.previouse();
}
}

这样我们通过Manager设定一个初始的state,然后通过next,previous就可以进行
状态转换,而具体next,previous是哪个状态由具体的AState,BState等指定

No Comments »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress